package puissance4ensi;
import java.util.*;

public class Puissance4Ensi{
	private Partie partie;
	private Joueur joueur1;
	private Joueur joueur2;
	private Joueur joueurEnCours;
	private String modeDeJeu;
	private static String MODE_SOLO="solo";
	private static String MODE_DUO="duo";
	/**
	Méthode principale qui lance la partie
	**/
	
	public Puissance4Ensi()
	{
		initialisation();
	}

	public void run()
	{
		joueurEnCours = joueur1;
		 while(true)
		 {
			try {
				afficherPlateau(partie.getPlateau());
				jouerPion(joueurEnCours);
				if(joueurEnCours==joueur1)
					joueurEnCours= joueur2;
				else if(joueurEnCours==joueur2)
					joueurEnCours= joueur1;
			} catch (ExceptionColonnePleine e) {
				System.out.println("La colonne choisie est pleine");
			}
			catch (ExceptionPlateauPlein e) {
				afficherPlateau(partie.getPlateau());
				System.out.println("Le plateau est plein : match nul");
				quitter();
				initialisation();
				run();
			}
		}
	}

	/**
	Méthode d'affichage du plateau de jeu en mode texte
	**/
	private void afficherPlateau(Plateau p)
	{
		System.out.println("+ 1 2 3 4 5 6 7 +");
		for(int i=0;i<Plateau.getNbLigne();i++)
		{
			System.out.print("| ");
			for(int j=0;j<Plateau.getNbColonne();j++)
			{
				System.out.print(p.getPion(i,j).getCouleur().getValue()+" ");
			}
            System.out.println("|");
		}
		System.out.println("+ 1 2 3 4 5 6 7 +");
	}
	
	private void jouerPion(Joueur joueurEnCours) throws ExceptionColonnePleine, ExceptionPlateauPlein
	{
		//en mode solo, l'ordinateur jou une fois sur deux
		if(modeDeJeu.equals(MODE_SOLO) && joueurEnCours.equals(joueur2))
			joueurAuHasard();
		else{
			System.out.print("** "+joueurEnCours.getNom()+ " joue (0 pour quitter): ");
			Scanner sc = new Scanner(System.in);
			int v = sc.nextInt();
			if(v == 0)
			{
				quitter();
			}
			else if(v<0 || v>Plateau.getNbColonne())
				System.out.println(" Mauvaise saisie ");
			else
				partie.setPlateau(v, new Pion(joueurEnCours.getCouleur()));
		}
		//rajouter le test de la victoire en fonction du boolean
	}

	private void quitter()
	{
		System.out.print("Voulez-vous vraiment quitter le jeu ?? (0:oui / 1:non)");
		Scanner sc1 = new Scanner(System.in);
		if(sc1.nextInt() == 0)
		{
			System.out.print("Vous avez quitté le jeu !!!!");
			System.exit(0);
		}
	}

	private void initialisation()
	{
		//sélection du mode de jeu 2 joueurs ou 1 joueur 
		Scanner sc1 = new Scanner(System.in);
		do{
			System.out.println("sélectionnez le mode de jeu (solo ou duo)");
			modeDeJeu= sc1.nextLine();
		}
		while(!(modeDeJeu.equals(MODE_SOLO) || modeDeJeu.equals(MODE_DUO)));
		partie = new Partie();
		joueur1 = new Joueur(new String("joueur 1"), Couleur.JAUNE);
		joueur2 = new Joueur(new String("joueur 2"), Couleur.ROUGE);
	}
	
	private boolean joueurAuHasard() throws ExceptionColonnePleine, ExceptionPlateauPlein{
		int numColonne=(int)((Math.random()*100)%Plateau.getNbColonne());
		System.out.println("VALEUR DU RANDOM " +numColonne);
		partie.setPlateau(numColonne+1, new Pion(joueurEnCours.getCouleur()));
		return true;
	}
}

